import { JCKJ_Request } from './request'
import { localCache } from '../cache'
import emitter from '@/emitter'
import { api_fail } from '@/emitter'

const { VITE_APP_API_BASE_URL, VITE_API_TIMEOUT } = import.meta.env

const request = new JCKJ_Request({
  baseURL: VITE_APP_API_BASE_URL,
  timeout: VITE_API_TIMEOUT,
  interceptors: {
    requestSuccessFn(config) {
      const token = localCache.get('TOKEN')
      if (config.headers && token) {
        config.headers.Authorization = `Bearer ${token}`
      }
      return config
    },
    requestFailureFn(err) {
      console.log(err)

      return Promise.reject(err)
    },
    responseFailureFn(err) {
      // console.log(err)

      // const { status } = err.response || {}
      // try {
      //   checkStatus(status)
      // } catch (e) {
      //   console.error('response Error:', e)
      // }
      return Promise.reject(err)
    }
  }
})

/**
 * 检查错误状态码
 * @param errStatus 错误状态码
 */
export function checkStatus(errStatus: number | null) {
  // 定义错误信息，默认为未知错误
  let errMessage = '未知错误'
  console.log(errStatus)

  // 如果错误状态码存在
  if (errStatus) {
    // 使用switch语句判断错误状态码
    switch (errStatus) {
      case 400:
        // 错误状态码为400，错误信息为错误的请求
        errMessage = '错误的请求'
        break
      case 401:
        // 错误状态码为401，错误信息为未授权，请重新登录
        errMessage = '未授权，请重新登录'
        break
      case 403:
        // 错误状态码为403，错误信息为拒绝访问
        errMessage = '拒绝访问'
        break
      case 404:
        // 错误状态码为404，错误信息为请求错误,未找到该资源
        errMessage = '请求错误,未找到该资源'
        break
      case 405:
        // 错误状态码为405，错误信息为请求方法未允许
        errMessage = '请求方法未允许'
        break
      case 408:
        // 错误状态码为408，错误信息为请求超时
        errMessage = '请求超时'
        break
      case 500:
        // 错误状态码为500，错误信息为服务器端出错, 请联系管理员
        errMessage = '服务器端出错, 请联系管理员'
        break
      case 501:
        // 错误状态码为501，错误信息为网络未实现
        errMessage = '网络未实现'
        break
      case 502:
        // 错误状态码为502，错误信息为网络错误
        errMessage = '网络错误'
        break
      case 503:
        // 错误状态码为503，错误信息为服务不可用
        errMessage = '服务不可用'
        break
      case 504:
        // 错误状态码为504，错误信息为网络超时
        errMessage = '网络超时'
        break
      case 505:
        // 错误状态码为505，错误信息为http版本不支持该请求
        errMessage = 'http版本不支持该请求'
        break
      default:
        // 错误状态码为其他，错误信息为其他连接错误 --错误状态码
        errMessage = `其他连接错误 --${errStatus}`
    }
  } else {
    // 错误状态码不存在，错误信息为无法连接到服务器！
    errMessage = `无法连接到服务器！`
  }
  // 触发API:FAIL事件，传递错误信息和错误状态码

  emitter.emit(api_fail, errMessage, errStatus)
}

export default request
